package config

import (
	"embed"
	"encoding/json"
	"fmt"
	"os"
)

var (
	//go:embed config.json
	ConfigFs embed.FS
	config   *Config
)

// Config 配置结构
type Config struct {
	Redis RedisConfig `json:"redis"`
	Task  struct {
		DefaultWorkers int   `json:"default_workers"`
		MaxWorkers     int   `json:"max_workers"`
		ResultTTL      int64 `json:"result_ttl"`
	} `json:"task"`
}

// RedisConfig Redis配置项
type RedisConfig struct {
	Host      string `json:"host"`       // 服务器地址
	Port      int    `json:"port"`       // 服务器端口
	Password  string `json:"password"`   // 访问密码 可为空
	DB        int    `json:"db"`         // 数据库编号 默认使用0号数据库
	KeyPrefix string `json:"key_prefix"` // 键前缀配置
}

// LoadConfig 加载配置
func LoadConfig(configPath string) (*Config, error) {
	// 打印当前工作目录（调试用）
	pwd, _ := os.Getwd()
	fmt.Printf("当前工作目录: %s\n", pwd)

	// 列出所有嵌入的文件（调试用）
	entries, _ := ConfigFs.ReadDir(".")
	fmt.Println("Embedded files:")
	for _, entry := range entries {
		fmt.Printf("- %s\n", entry.Name())
	}

	// 从嵌入的文件系统读取配置
	data, err := ConfigFs.ReadFile(configPath)
	if err != nil {
		return nil, fmt.Errorf("读取配置文件失败: %v", err)
	}

	// 解析JSON
	if err := json.Unmarshal(data, &config); err != nil {
		return nil, fmt.Errorf("解析配置文件失败: %v", err)
	}

	redisHost := os.Getenv("REDIS_HOST")
	if redisHost != "" {
		config.Redis.Host = redisHost
	}

	return config, nil
}

// GetKey 获取带前缀的key
func (r RedisConfig) GetKey(key string) string {
	if r.KeyPrefix != "" {
		return r.KeyPrefix + key
	}
	return key
}
